#pragma once
#define REAL double

void indicator(REAL **bd_posi, REAL **bd_force, int nt);
void full_step(REAL **u, REAL **v, REAL **nu, REAL **nv, REAL **p, REAL **fxx, REAL **fyy);
void update_uv(REAL **nu, REAL **nv, REAL **tu, REAL **tv, REAL **p);
void advection_step(REAL **u, REAL **v, REAL **adv_u, REAL **adv_v);
void temp_uv(REAL **tu, REAL **tv, REAL **u, REAL **v, REAL **adv_u, REAL **adv_v, REAL **fxx, REAL **fyy);
void Poisson(REAL **tu, REAL **tv, REAL **p);
void MG_Poisson(REAL **p, REAL **f);
void vcycle_p(REAL **uf, REAL **ff, int nxf, int nyf, int ilevel);
void relax(REAL **p, REAL **f, int nxt, int nyt);
void restriction(REAL **u_fine, REAL **u_coarse, int nxt, int nyt);
void prolongation(REAL **u_coarse, REAL **u_fine, int nxt, int nyt);
void grad_p(REAL **p, REAL **dpdx, REAL **dpdy, int nxt, int nyt);
void source_p(REAL **tu, REAL **tv, REAL **divuv, int nxt, int nyt);
void div_uv(REAL **tu, REAL **tv, REAL **divuv, int nxt, int nyt);
void residual(REAL **r, REAL **u, REAL **f, int nxt, int nyt);
void laplace(REAL **p, REAL **lap_p, int nxt, int nyt);
void pressure_update(REAL **a);
void augmenuv(REAL **u, REAL **v, int nx, int ny);
void sf_force(REAL **fxx, REAL **fyy, REAL **bdpo, int nt, REAL *ds);
//void sf_force(REAL **fxx, REAL **fyy, BN * head);

